#ifndef SQLITEMANAGE_H
#define SQLITEMANAGE_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QStringList>
#include <QVariant>
#include <QDebug>
#include <QCryptographicHash>
#include <QSqlRelationalTableModel>
#include <QMessageBox>
#include <QDateTime>
#include "serialportmanage.h"

class SqliteManage:public QObject
{
    Q_OBJECT
public:
    explicit SqliteManage(const QString &connectionName = QString());
    //explicit SqliteManage(QObject *parent = nullptr);
    ~SqliteManage();
    // 打开数据库
    bool openDatabase(const QString &dbName);
    // 关闭数据库
    void closeDatabase();
    // 创建表
    bool createTable(const QString &tableName, const QStringList &fields);
    // 插入数据
    bool insertData(const QString &tableName, const QVariantMap &data);
    // 删除数据
    bool deleteData(const QString &tableName, const QString &condition);
    // 更新数据
    bool updateData(const QString &tableName, const QVariantMap &data, const QString &condition);
    // 查询数据
    QList<QVariantMap> selectData(const QString &tableName, const QString &condition = "", const QStringList &fields = QStringList());
    // 执行SQL语句
    bool executeSql(const QString &sql);
    // 获取最后错误信息
    QString lastError() const;
    // 检查表是否存在
    bool tableExists(const QString &tableName);
    QSqlDatabase getDB();

    //获取id
    bool getDeviceIdByName(const QString &name ,int &id);

    // 获取所有串口配置
    QList<SerialConfig> getAllSerialConfigs();
    // 添加新的串口配置
    bool addSerialConfig(const SerialConfig &config);
    // 删除串口配置
    bool deleteSerialConfig(int id);
    // 更新串口配置
    bool updateSerialConfig(const SerialConfig &config);

    //保存数据
    bool insertSensorData(int deviceId, double temperature, double humidity, double light);
    //查询数据
    QSqlQuery querySensorData(int deviceId, const QDateTime &startTime, const QDateTime &endTime);
    // 获取设备列表
    bool getDeviceList(QSqlQuery &query);
    //得到用户id
    int getUserIdByName(QString &username);

    private:
        QSqlDatabase m_db;
        QString m_connectionName;
        QString m_lastError;

};




#endif // SQLITEMANAGE_H
